package com.dd.controller;

import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.stage.Stage;

public class AqiDetectController {

    @FXML private Label provinceLabel;
    @FXML private Label cityLabel;
    @FXML private Label addressLabel;
    @FXML private Label dateLabel;

    @FXML private TextField so2Field;
    @FXML private TextField coField;
    @FXML private TextField pm25Field;

    @FXML private Label so2LevelLabel;
    @FXML private Label coLevelLabel;
    @FXML private Label pm25LevelLabel;
    @FXML private Label finalLevelLabel;

    @FXML private Button saveButton;

    // 用于接收上一个页面传递的数据
    public void setTaskInfo(String province, String city, String address, String date) {
        provinceLabel.setText(province);
        cityLabel.setText(city);
        addressLabel.setText(address);
        dateLabel.setText(date);
    }
/*AqiDetectController 是 JavaFX 应用中的一个控制器类，主要用于“空气质量检测”页面的交互逻辑。它的核心作用是：
接收并显示任务信息：通过 setTaskInfo 方法接收上一个页面传递过来的省、市、地址、日期等信息，并显示在界面上。
输入污染物数值：用户可以在界面上输入 SO₂、CO、PM2.5 的检测数值。
动态计算污染等级：当用户输入完某项污染物数值并失去焦点时，会自动计算该项的污染等级（如“一级（优）”、“二级（良）”等），并显示在对应的标签上。
综合判断最终等级：根据三项污染物的等级，自动计算出一个“最终等级”并显示。
保存与校验：点击“保存”按钮时，会校验所有检测数值是否填写完整，若完整则弹窗提示“保存成功”，否则提示填写所有数值
*/
    @FXML
    public void initialize() {
        // 失去焦点时动态计算等级
        so2Field.focusedProperty().addListener((obs, oldV, newV) -> {
            if (!newV) so2LevelLabel.setText(calcLevel("SO2", so2Field.getText()));
            updateFinalLevel();
        });
        coField.focusedProperty().addListener((obs, oldV, newV) -> {
            if (!newV) coLevelLabel.setText(calcLevel("CO", coField.getText()));
            updateFinalLevel();
        });
        pm25Field.focusedProperty().addListener((obs, oldV, newV) -> {
            if (!newV) pm25LevelLabel.setText(calcLevel("PM25", pm25Field.getText()));
            updateFinalLevel();
        });

        saveButton.setOnAction(e -> {
            if (so2Field.getText().trim().isEmpty() || coField.getText().trim().isEmpty() || pm25Field.getText().trim().isEmpty()) {
                showAlert("请填写所有检测数值！");
            } else {
                showAlert("保存成功！");
            }
        });
    }

    private String calcLevel(String type, String valueStr) {
        try {
            double value = Double.parseDouble(valueStr.trim());
            // 这里只是示例，实际标准请根据需求调整
            if ("SO2".equals(type) || "CO".equals(type)) {
                if (value <= 50) return "一级（优）";
                else if (value <= 150) return "二级（良）";
                else if (value <= 475) return "三级（轻度污染）";
                else if (value <= 800) return "四级（中度污染）";
                else if (value <= 1600) return "五级（重度污染）";
                else return "六级（严重污染）";
            } else if ("PM25".equals(type)) {
                if (value <= 35) return "一级（优）";
                else if (value <= 75) return "二级（良）";
                else if (value <= 115) return "三级（轻度污染）";
                else if (value <= 150) return "四级（中度污染）";
                else if (value <= 250) return "五级（重度污染）";
                else return "六级（严重污染）";
            }
        } catch (Exception e) {
            return "";
        }
        return "";
    }

    private void updateFinalLevel() {
        String[] levels = {so2LevelLabel.getText(), coLevelLabel.getText(), pm25LevelLabel.getText()};
        int max = 1;
        String[] levelNames = {"一级（优）", "二级（良）", "三级（轻度污染）", "四级（中度污染）", "五级（重度污染）", "六级（严重污染）"};
        for (String lv : levels) {
            for (int i = 0; i < levelNames.length; i++) {
                if (lv != null && lv.startsWith(String.valueOf(i + 1))) {
                    if (i + 1 > max) max = i + 1;
                }
            }
        }
        finalLevelLabel.setText(levelNames[max - 1]);
    }

    private void showAlert(String msg) {
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("提示");
        alert.setHeaderText(null);
        alert.setContentText(msg);
        alert.showAndWait();
    }
} 